home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / system / innosetup / isetup-5.1.8.exe / {app} / Examples / CodeAutomation.iss < prev    next >
Text File  |  2006-10-03  |  8KB  |  272 lines

  1. ; -- CodeAutomation.iss --
  2. ;
  3. ; This script shows how to use the COM Automation object support.
  4.  
  5. [Setup]
  6. AppName=My Program
  7. AppVerName=My Program version 1.5
  8. CreateAppDir=no
  9. DisableProgramGroupPage=yes
  10. DefaultGroupName=My Program
  11. UninstallDisplayIcon={app}\MyProg.exe
  12. OutputDir=userdocs:Inno Setup Examples Output
  13.  
  14. [Code]
  15.  
  16. {--- SQLDMO ---}
  17.  
  18. const
  19.   SQLServerName = 'localhost';
  20.   SQLDMOGrowth_MB = 0;
  21.  
  22. procedure SQLDMOButtonOnClick(Sender: TObject);
  23. var
  24.   SQLServer, Database, DBFile, LogFile: Variant;
  25.   IDColumn, NameColumn, Table: Variant;
  26. begin
  27.   if MsgBox('Setup will now connect to Microsoft SQL Server ''' + SQLServerName + ''' via a trusted connection and create a database. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
  28.     Exit;
  29.  
  30.   { Create the main SQLDMO COM Automation object }
  31.  
  32.   try
  33.     SQLServer := CreateOleObject('SQLDMO.SQLServer');
  34.   except
  35.     RaiseException('Please install Microsoft SQL server connectivity tools first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
  36.   end;
  37.  
  38.   { Connect to the Microsoft SQL Server }
  39.  
  40.   SQLServer.LoginSecure := True;
  41.   SQLServer.Connect(SQLServerName);
  42.   
  43.   MsgBox('Connected to Microsoft SQL Server ''' + SQLServerName + '''.', mbInformation, mb_Ok);
  44.  
  45.   { Setup a database }
  46.  
  47.   Database := CreateOleObject('SQLDMO.Database');
  48.   Database.Name := 'Inno Setup';
  49.   
  50.   DBFile := CreateOleObject('SQLDMO.DBFile');
  51.   DBFile.Name := 'ISData1';
  52.   DBFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.mdf';
  53.   DBFile.PrimaryFile := True;
  54.   DBFile.FileGrowthType := SQLDMOGrowth_MB;
  55.   DBFile.FileGrowth := 1;
  56.  
  57.   Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFile);
  58.  
  59.   LogFile := CreateOleObject('SQLDMO.LogFile');
  60.   LogFile.Name := 'ISLog1';
  61.   LogFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.ldf';
  62.  
  63.   Database.TransactionLog.LogFiles.Add(LogFile);
  64.   
  65.   { Add the database }
  66.  
  67.   SQLServer.Databases.Add(Database);
  68.  
  69.   MsgBox('Added database ''' + Database.Name + '''.', mbInformation, mb_Ok);
  70.  
  71.   { Setup some columns }
  72.  
  73.   IDColumn := CreateOleObject('SQLDMO.Column');
  74.   IDColumn.Name := 'id';
  75.   IDColumn.Datatype := 'int';
  76.   IDColumn.Identity := True;
  77.   IDColumn.IdentityIncrement := 1;
  78.   IDColumn.IdentitySeed := 1;
  79.   IDColumn.AllowNulls := False;
  80.  
  81.   NameColumn := CreateOleObject('SQLDMO.Column');
  82.   NameColumn.Name := 'name';
  83.   NameColumn.Datatype := 'varchar';
  84.   NameColumn.Length := '64';
  85.   NameColumn.AllowNulls := False;
  86.   
  87.   { Setup a table }
  88.  
  89.   Table := CreateOleObject('SQLDMO.Table');
  90.   Table.Name := 'authors';
  91.   Table.FileGroup := 'PRIMARY';
  92.   
  93.   { Add the columns and the table }
  94.   
  95.   Table.Columns.Add(IDColumn);
  96.   Table.Columns.Add(NameColumn);
  97.  
  98.   Database.Tables.Add(Table);
  99.  
  100.   MsgBox('Added table ''' + Table.Name + '''.', mbInformation, mb_Ok);
  101. end;
  102.  
  103. {--- IIS ---}
  104.  
  105. const
  106.   IISServerName = 'localhost';
  107.   IISServerNumber = '1';
  108.   IISURL = 'http://127.0.0.1';
  109.  
  110. procedure IISButtonOnClick(Sender: TObject);
  111. var
  112.   IIS, WebSite, WebServer, WebRoot, VDir: Variant;
  113.   ErrorCode: Integer;
  114. begin
  115.   if MsgBox('Setup will now connect to Microsoft IIS Server ''' + IISServerName + ''' and create a virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
  116.     Exit;
  117.  
  118.   { Create the main IIS COM Automation object }
  119.  
  120.   try
  121.     IIS := CreateOleObject('IISNamespace');
  122.   except
  123.     RaiseException('Please install Microsoft IIS first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
  124.   end;
  125.  
  126.   { Connect to the IIS server }
  127.  
  128.   WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc');
  129.   WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber);
  130.   WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
  131.  
  132.   { (Re)create a virtual dir }
  133.  
  134.   try
  135.     WebRoot.Delete('IIsWebVirtualDir', 'innosetup');
  136.     WebRoot.SetInfo();
  137.   except
  138.   end;
  139.  
  140.   VDir := WebRoot.Create('IIsWebVirtualDir', 'innosetup');
  141.   VDir.AccessRead := True;
  142.   VDir.AppFriendlyName := 'Inno Setup';
  143.   VDir.Path := 'C:\inetpub\innosetup';
  144.   VDir.AppCreate(True);
  145.   VDir.SetInfo();
  146.  
  147.   MsgBox('Created virtual directory ''' + VDir.Path + '''.', mbInformation, mb_Ok);
  148.  
  149.   { Write some html and display it }
  150.  
  151.   if MsgBox('Setup will now write some HTML and display the virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
  152.     Exit;
  153.  
  154.   ForceDirectories(VDir.Path);
  155.   SaveStringToFile(VDir.Path + '/index.htm', '<html><body>Inno Setup rocks!</body></html>', False);
  156.   if not ShellExec('open', IISURL + '/innosetup/index.htm', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then
  157.     MsgBox('Can''t display the created virtual directory: ''' + SysErrorMessage(ErrorCode) + '''.', mbError, mb_Ok);
  158. end;
  159.  
  160. {--- MSXML ---}
  161.  
  162. const
  163.   XMLURL = 'http://cvs.jrsoftware.org/view/*checkout*/ishelp/isxfunc.xml';
  164.   XMLFileName = 'isxfunc.xml';
  165.   XMLFileName2 = 'isxfuncmodified.xml';
  166.  
  167. procedure MSXMLButtonOnClick(Sender: TObject);
  168. var
  169.   XMLHTTP, XMLDoc, NewNode, RootNode: Variant;
  170.   Path: String;
  171. begin
  172.   if MsgBox('Setup will now use MSXML to download XML file ''' + XMLURL + ''' and save it to disk.'#13#13'Setup will then load, modify and save this XML file. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
  173.     Exit;
  174.     
  175.   { Create the main MSXML COM Automation object }
  176.  
  177.   try
  178.     XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP');
  179.   except
  180.     RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
  181.   end;
  182.   
  183.   { Download the XML file }
  184.  
  185.   XMLHTTP.Open('GET', XMLURL, False);
  186.   XMLHTTP.Send();
  187.  
  188.   Path := ExpandConstant('{src}\');
  189.   XMLHTTP.responseXML.Save(Path + XMLFileName);
  190.  
  191.   MsgBox('Downloaded the XML file and saved it as ''' + XMLFileName + '''.', mbInformation, mb_Ok);
  192.  
  193.   { Load the XML File }
  194.  
  195.   XMLDoc := CreateOleObject('MSXML2.DOMDocument');
  196.   XMLDoc.async := False;
  197.   XMLDoc.resolveExternals := False;
  198.   XMLDoc.load(Path + XMLFileName);
  199.   if XMLDoc.parseError.errorCode <> 0 then
  200.     RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason);
  201.   
  202.   MsgBox('Loaded the XML file.', mbInformation, mb_Ok);
  203.  
  204.   { Modify the XML document }
  205.   
  206.   NewNode := XMLDoc.createElement('isxdemo');
  207.   RootNode := XMLDoc.documentElement;
  208.   RootNode.appendChild(NewNode);
  209.   RootNode.lastChild.text := 'Hello, World';
  210.  
  211.   { Save the XML document }
  212.  
  213.   XMLDoc.Save(Path + XMLFileName2);
  214.  
  215.   MsgBox('Saved the modified XML as ''' + XMLFileName2 + '''.', mbInformation, mb_Ok);
  216. end;
  217.  
  218.  
  219. {--- Word ---}
  220.  
  221. procedure WordButtonOnClick(Sender: TObject);
  222. var
  223.   Word: Variant;
  224. begin
  225.   if MsgBox('Setup will now check whether Microsoft Word is running. Do you want to continue?', mbInformation, mb_YesNo) = idNo then
  226.     Exit;
  227.  
  228.   { Try to get an active Word COM Automation object }
  229.   
  230.   try
  231.     Word := GetActiveOleObject('Word.Application');
  232.   except
  233.   end;
  234.   
  235.   if VarIsEmpty(Word) then
  236.     MsgBox('Microsoft Word is not running.', mbInformation, mb_Ok)
  237.   else
  238.     MsgBox('Microsoft Word is running.', mbInformation, mb_Ok)
  239. end;
  240.  
  241. {---}
  242.  
  243. procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent);
  244. begin
  245.   with TButton.Create(WizardForm) do begin
  246.     Left := ALeft;
  247.     Top := ATop;
  248.     Width := WizardForm.CancelButton.Width;
  249.     Height := WizardForm.CancelButton.Height;
  250.     Caption := ACaption;
  251.     OnClick := ANotifyEvent;
  252.     Parent := WizardForm.WelcomePage;
  253.   end;
  254. end;
  255.  
  256. procedure InitializeWizard();
  257. var
  258.   Left, Top, TopInc: Integer;
  259. begin
  260.   Left := WizardForm.WelcomeLabel2.Left;
  261.   TopInc := WizardForm.CancelButton.Height + 8;
  262.   Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc;
  263.  
  264.   CreateButton(Left, Top, '&SQLDMO...', @SQLDMOButtonOnClick);
  265.   Top := Top + TopInc;
  266.   CreateButton(Left, Top, '&IIS...', @IISButtonOnClick);
  267.   Top := Top + TopInc;
  268.   CreateButton(Left, Top, '&MSXML...', @MSXMLButtonOnClick);
  269.   Top := Top + TopInc;
  270.   CreateButton(Left, Top, '&Word...', @WordButtonOnClick);
  271. end;
  272.